package com.yanggu.scala.chapater13.closure

//闭包
object ClosureDemo01 {

  def main(args: Array[String]): Unit = {
    //闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)
    //函数的定义中使用了函数未定义的变量, 该变量为函数内部的匿名函数自定义的参数
    def minusxy(x: Int) = (y: Int) => x - y

    //f函数就是闭包
    val f = minusxy(20)
    println("f(1) = " + f(1))
    println("f(2) = " + f(2))

    //  第1点
    //(y: Int) => x – y
    //返回的是一个匿名函数, 因为该函数引用到到函数外的x, 那么该函数和x整体形成一个闭包
    //如: 这里 val f = minusxy(20) 的f函数就是闭包
    //你可以这样理解，返回函数是一个对象，而x就是该对象的一个字段，他们共同形成一个闭包
    //当多次调用f时（可以理解多次调用闭包），发现使用的是同一个x, 所以x不变。
    //在使用闭包时，主要搞清楚返回函数引用了函数外的哪些变量，因为他们会组合成一个整体(实体),形成一个闭包。
  }

}
